/**
 * @创建人 wsdc
 * @时间 2021/4/4
 * @描述 $
 */
package biz.ws;

/**
 *  websocket
 *  <li>    用户管理
 *  <li>    消息处理
 *  <li>    消息来源
 *
 *  用户管理
 *  {@link biz.ws.ws.UserContainer}         登录成功的用户均会保存到这个实例里面
 *  {@link biz.ws.ws.MsgSession}            session  就是一个用户，描述一个用户 在系统里面的有状态的链接
 *
 *  消息
 *  {@link biz.ws.ws.Message}               消息的实体
 *  {@link biz.ws.ws.MsgHolder}             消息的包装 来自那个 channel 登录信息等等
 *
 *  消息处理
 *  {@link biz.ws.ws.WebsocketService}      集成大部分功能的门面入口 无论是客户端的消息还是kafka的消息，均流入到这里面
 *  {@link biz.ws.receive.MessageExecutor}  不同消息的不同处理，即业务层 比如说心跳 等等
 *                                          业务的扩展 主要是实现这个接口
 *  {@link biz.ws.ws.MsgSender}             消息的发送 消息如何发送 设计到分布式的点，因为链接不一定在当前的节点上
 *                                          通过kafka协调
 *  调用走向 {@link biz.ws.ws.WebsocketService} -> {@link biz.ws.receive.MessageExecutor} -> {@link biz.ws.ws.MsgSender}
 *
 *  消息转换
 *  {@link biz.ws.ws.MessageConvert}        实体和字符串之间的转换 默认使用json
 *
 *  消息存储
 *  {@link biz.ws.ws.MsgDataSource}         消息的存取
 *
 *  消息来源
 *  {@link biz.ws.ws.Server}                来自客户端端的消息 分发到 {@link biz.ws.ws.WebsocketService}
 *  {@link biz.ws.receive.kafka.KafkaMessageReceiveMain}
 *  {@link biz.ws.receive.kafka.KafkaMessageReceiveTemp}
 *                                          来自kafka的消息 投递到 {@link biz.ws.ws.WebsocketService}
 *
 *  其他
 *  {@link biz.ws.ws.Server}                基于netty搭建的websocket服务，业务外围，负责和链接交互 数据一律投放 {@link biz.ws.ws.WebsocketService}
 *  {@link biz.ws.ws.client.WsClient}       websocket客户端 测试的时候使用，
 *  {@link biz.ws.WsConfig}                 系统的配置
 *  {@link biz.ws.ws.WsCst}                 辅助类
 *  {@link biz.ws.ws.WsModel}               定义一些交互性的实体
 *
 *  {@link biz.ws.receive.kafka.HAScheduler}    kafka分区的协调者
 *
 *
 *
 *  线程问题
 *  <li>    netty 中的线程，里面抛出的异常一律会导致链接断开 这里不要有阻塞操作(灾难)
 *  <li>    kafka 中的线程
 *  <li>    消息持久化的线程
 *  <li>    这里处理的有点混乱，因为不同的线程处理的方式需要不一样
 *
 *  其他问题
 *  <li>    消息没有做异常情况下的处理 没有重试(简单重试没有意义)
 *  <li>    链路埋点 这里没有深入(压力测试下，埋点数据很关键，那个点慢了)
 *  <li>    暂时没有全面的链路压测方案以及监控方案
 *  <li>    网络攻击和黑名单
 *
 *  技术栈
 *  <li>    spring boot / spring cloud /
 *  <li>    nacos 服务注册发现 当前服务作为分布式服务的一个组件
 *  <li>    netty websocket通信
 *  <li>    mongodb 消息的落地
 *  <li>    kafka 消息流转通道
 *
 *  HA
 *  简化流程 没有复杂的选举，心跳检测
 *  <li>    AB 相互绑定 如果B宕机了 A代替B 直到B上线
 *  <li>    通过注册中心来判断 B 是否在线和宕机
 *          也可以修改成 提供一个 ping/pong 接口 超时即视为宕机
 *
 *  分片
 *  合理的分片 减少单台机器的负载
 *  <li>    根据userId进行分片 只能分配到具体机器上线
 *  <li>    节点对连接数进行限制 不同的机器 网络 性能不一样
 *          对于延时等也有一定的要求
 *
 *  kafka分区
 *  <li>    不同的节点订阅同一个主题的不同分区
 *
 *  tcp参数
 *  <li>    backlog     压测要调试这个参数
 *
 *  测试
 *  {@link biz.ws.ws.client.WsClient}       客户端工具
 *  {@link biz.ws.controller.ClientTestController}      简单的测试样例 ()
 */